草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 将一个结构转换为另一个

我正在尝试将一个struct转换为另一个。但是我在编译时不断收到这个错误:conversiontonon-scalartyperequested我得到这一行的错误:p是一个结构前缀,我需要将它转换为结构prefix_ipv4get_info(type,(structprefix_ipv4)p);代码:ospf_external_info_delete(u_chartype,structprefix_ipv4p){///////////////}structprefix_ipv4{u_charfamily;u_charprefixlen;structin_addrprefix__attr

c++ - 为什么sizeof()编译器返回的值是依赖的?

structA{charc;doubled;}a;mingw32-gcc.exe中的:sizeofa=16在gcc4.6.3(ubuntu)中:sizeofa=12为什么它们不同?我认为应该是16,gcc4.6.3是否做了一些优化? 最佳答案 如果需要,编译器可能会为目标体系结构执行数据结构对齐。这样做可能纯粹是为了提高应用程序的运行时性能,或者在某些情况下是处理器需要的(即,如果数据未对齐,则程序将无法运行)。例如,大多数(但不是全部)SSE2指令要求数据在16字节边界上对齐。简而言之,计算机内存中的所有内容都有一个地址。假设我们

c++ - 常量的哪个属性使其不可更改?

今天我遇到了一个面试,其中一个问题对我来说非常棘手。面试官说“如何让常量能够改变它的值?”我回答“使用指针”并给他看了一个例子:intmain(void){constinta=3;int*ptr;ptr=(int*)(&a);printf("A=%d\n",a);*ptr=5;printf("A=%d\n",a);return0;}但他说这很好。但是告诉我哪个是使常数不变的属性?他还说,有一个属性我们可以改变并使常量可变。有这样的属性(property)吗?它是如何工作的? 最佳答案 如果他说这很好,那他就错了:试图修改常量对象会导

c++ - 将 float 转换为 int,有和没有转换

这两个是等价的吗?floatf=3.14;inti;i=f;//3和floatf=3.14;inti;i=(int)f;//3 最佳答案 编译器处理这两种情况的方式没有区别。生成的机器代码将是相同的。但是,第一种是隐式转换,第二种是显式转换。根据编译器标志,您可能会在执行丢失精度的隐式转换时收到警告。旁注,文字3.14的类型为double,这意味着语句floatf=3.14中也可能存在精度损失>。一种干净的方法是编写floatf=3.14f指定这是float类型的值3.14。 关于c++

c++ - 递归函数的内存分配

调用递归函数时内存是如何分配的?一个函数有它自己分配的内存。当它被调用时,参数(不是引用传递的参数)和变量获得内存。那么,当从函数体内再次调用该函数时,如何将内存分配给第二次调用的变量和参数? 最佳答案 递归函数与任何其他函数没有什么不同——自动局部变量通过将堆栈指针推进到足够远以说明它们的大小总和(加上对齐所需的任何填充)而作为单个block分配。每个递归调用都会以这种方式压入一个新的堆栈帧,然后在返回时将其弹出。如果递归未能达到基本情况,堆栈将迅速耗尽,导致同名的StackOverflow崩溃。

java - codechef 和 spoj 问题中使用模 10^9+7 的意义是什么?

我正在研究aproblem这需要输出为“对于每一行输出答案模10^9+7”。为什么问题中包含模10^9+7?它有什么意义?我不是在寻找问题的解决方案;只有那个特定常数的重要性。 最佳答案 问题要求结果取模素数,因为备选方案,即要求给出“高阶位”的浮点结果和要求整个结果,并不总是问题设置者正在寻找的。这些问题通常是“发现并实现重复”的问题。低位通常会告诉你你发现的递归是否正确。对于“高阶位”问题可能有一个特殊的技巧,也许是基于一个聪明的解析近似。人们不经常询问整个结果的原因是这需要参赛者进行大数运算。问题制定者通常不希望因为“错误的原

c++ - 堆栈内存如何工作或函数变量如何在堆栈上分配和访问

当我在这个page上读到Stack和Heap的例子时,我有一个问题,如果像页面上给出的示例一样,一个函数将其所有局部变量放在堆栈上,堆栈实际上是否访问不同的变量?因为堆栈通常只能访问顶部,所以它只能访问函数的一个变量。这是否意味着函数的变量存储在堆栈上的结构中? 最佳答案 堆栈指针,顾名思义,是一个和其他指针一样的指针,它指向普通的标准内存。要访问堆栈的任何区域,您只需向指针添加一个偏移量。如果你从C指针的角度来考虑它,你就有堆栈指针char*stack_pointer=some_memory;这个指针然后可以用作普通指针,包括添加

c++ - 对任意值类型的操作

这article描述了一种在C#中允许添加任意值类型的方法,这些值类型具有为其定义的+运算符。本质上它允许以下代码:publicTAdd(Tval1,Tval2){returnval1+val2;}此代码无法编译,因为不能保证T类型具有“+”运算符的定义,但效果是通过如下代码实现的:publicTAdd(Tval1,Tval2){//Numdefinesa'+'operationwhichreturnsavalueoftypeTreturn(newNum(val1)+newNum(val2));}点击链接查看Num类如何实现这一点。无论如何,关于这个问题。有什么方法可以在C或C++中实

c++ - 释放内存的重要性?

这个问题在这里已经有了答案:关闭13年前。PossibleDuplicate:WhatREALLYhappenswhenyoudon’tfreeaftermalloc?在C/C++中结束程序时,您必须通过释放指针来清理。如果你不释放内存会发生什么,比如你有一个指向int的指针并且在程序结束时没有删除它?内存是否还在使用,只能重启才能释放,还是程序结束时自动释放?在最后一种情况下,如果操作系统为您做了,为什么要释放它?

c++ - C 和 C++ : Array element access pointer vs int

如果您执行myarray[i]或将myarray[i]的地址存储在指针中,是否存在性能差异?编辑:这些指针都是在我的程序中一个不重要的步骤中计算出来的,性能不是标准。在关键部分,指针保持静态并且不被修改。现在的问题是这些静态指针是否比一直使用myarray[i]更快。​​ 最佳答案 对于这段代码:intmain(){inta[100],b[100];int*p=b;for(unsignedinti=0;i在g++中使用-O3优化构建时,语句:a[i]=i;产生汇编输出:mov%eax,(%ecx,%eax,4)和这个声明:*p++=